package com.itjin.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.itjin.model.domain.entity.Post;
import com.itjin.model.domain.vo.GetPostListVO;
import com.itjin.model.domain.vo.PostLikeVO;
import com.itjin.model.domain.vo.PostDetailVO;
import com.itjin.model.domain.dto.CreatePostDTO;
import com.itjin.model.domain.dto.CreateCommentDTO;
import com.itjin.model.domain.vo.CommentVO;
import com.itjin.model.domain.vo.PostCollectVO;
import com.itjin.model.domain.dto.PostReportDTO;
import com.itjin.model.domain.vo.ReportedPostVO;
import com.itjin.model.domain.dto.IncreasePostHeatDTO;
import com.itjin.model.domain.vo.PostHeatVO;
import com.itjin.model.domain.dto.PostListQueryDTO;
import java.util.List;

public interface PostService extends IService<Post> {
  /**
   * 点赞帖子
   * 
   * @param postId 帖子ID
   * @param userId 用户ID
   * @return 点赞结果
   */
  PostLikeVO likePost(Integer postId, Integer userId);

  /**
   * 获取帖子详情
   * 
   * @param postId 帖子ID
   * @return 帖子详情
   */
  PostDetailVO getPostDetail(Integer postId);

  /**
   * 创建帖子
   * 
   * @param createPostDTO 帖子信息
   * @return 创建的帖子ID
   */
  Integer createPost(CreatePostDTO createPostDTO);

  /**
   * 发表评论或回复
   * 
   * @param createCommentDTO 评论信息
   * @return 评论详情
   */
  CommentVO createComment(CreateCommentDTO createCommentDTO);

  /**
   * 删除评论
   * 
   * @param commentId 评论ID
   * @param userId    用户ID
   * @return 是否删除成功
   */
  boolean deleteComment(Integer commentId, Integer userId);

  /**
   * 收藏帖子
   * 
   * @param postId 帖子ID
   * @param userId 用户ID
   * @return 收藏结果
   */
  PostCollectVO collectPost(Integer postId, Integer userId);

  /**
   * 根据查询参数获取帖子列表（支持类型筛选和排序）
   * 
   * @param queryParam 查询参数（包含类型和排序条件）
   * @return 帖子列表
   */
  List<GetPostListVO> getPostListWithSort(PostListQueryDTO queryParam);

  /**
   * 删除帖子
   * 
   * @param postId 帖子ID
   * @param userId 当前用户ID（用于验证权限）
   * @return 是否删除成功
   */
  boolean deletePost(Integer postId, Integer userId);

  /**
   * 举报帖子
   * 
   * @param reportDTO 举报信息
   * @return 是否举报成功
   */
  boolean reportPost(PostReportDTO reportDTO);

  /**
   * 获取被举报的帖子列表
   * 
   * @return 被举报的帖子列表
   */
  List<ReportedPostVO> getReportedPosts();

  /**
   * 处理举报（通过，认为举报不成立）
   * 
   * @param reportId     举报记录ID
   * @param handleResult 处理结果说明
   * @return 是否处理成功
   */
  boolean approveReport(Integer reportId, String handleResult);

  /**
   * 处理举报（删除帖子，认为举报成立）
   * 
   * @param reportId     举报记录ID
   * @param handleResult 处理结果说明
   * @return 是否处理成功
   */
  boolean rejectAndDeletePost(Integer reportId, String handleResult);

  /**
   * 获取用户收藏的帖子列表
   * 
   * @param userId 用户ID
   * @return 收藏的帖子列表
   */
  List<GetPostListVO> getUserCollectionList(Integer userId);

  /**
   * 获取用户发布的帖子列表
   * 
   * @param userId 用户ID
   * @return 发布的帖子列表
   */
  List<GetPostListVO> getUserPublishList(Integer userId);

  /**
   * 获取用户点赞的帖子列表
   * 
   * @param userId 用户ID
   * @return 点赞的帖子列表
   */
  List<GetPostListVO> getUserLikeList(Integer userId);

  /**
   * 获取待审核的帖子列表
   * 
   * @return 待审核的帖子列表
   */
  List<GetPostListVO> getPendingPosts();

  /**
   * 通过帖子审核
   * 
   * @param postId  帖子ID
   * @param adminId 管理员ID
   * @return 是否操作成功
   */
  boolean approvePost(Integer postId, Integer adminId);

  /**
   * 拒绝帖子审核
   * 
   * @param postId  帖子ID
   * @param adminId 管理员ID
   * @param reason  拒绝原因
   * @return 是否操作成功
   */
  boolean rejectPost(Integer postId, Integer adminId, String reason);

  /**
   * 增加帖子热度
   * 
   * @param increasePostHeatDTO 增加热度请求参数
   * @return 热度操作结果
   */
  PostHeatVO increasePostHeat(IncreasePostHeatDTO increasePostHeatDTO);
}
